<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script>
    let m1 = new Map()
    m1.set('001', '大美女')
    m1.set('002', '二美女')
    m1.set('003', '三美女')
    m1.set('004', '四美女')
    console.log(m1);
    // m1.forEach(function (key, value) {//用foreach的时候千万不要忘记function
    //   console.log(key, value);
    // })


    // set
    let s1 = new Set();
    s1.add('大美女')
    s1.add('二美女')
    s1.add('三美女')
    s1.add('三美女')
    console.log(s1);//set会去掉重复值
    // 遍历迭代
    console.log('遍历迭代');
    for (let value of s1.values()) {
      console.log('遍历迭代:', value);
    }
    // s1.forEach(function (key, value) {
    //   console.log(key, value);
    // })

    //set和数组转换
    console.log('\n数组转换成set');
    let arr = [['k1', 'k1'], ['k2', 'v2']]
    let s2 = new Set(arr);
    console.log(s2);

    console.log('\nset转换成数组');
    let arr2 = [...s2]
    console.log(arr2);


    // 数组去重
    console.log('\n数组去重复');
    let a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 5]
    a1.push(18)//为数组添加元素
    let s3 = new Set(a1)
    s3.add('89', '45')
    let arr3 = [...s3]
    console.log(arr3);


    // 并集,适当集合放在一起的时候会去重
    console.log('\n求并集');
    let a = new Set([1, 2, 3])
    let b = new Set([4, 2, 3, 56])
    let bingji = new Set([...a, ...b])
    console.log(bingji);


    // 求交集
    console.log('\n求交集');
    let a2 = new Set([1, 2, 3])
    let b2 = new Set([4, 2, 3, 56])
    let jiaoji = new Set([...a2].filter(x => b2.has(x)))//
    console.log(jiaoji);

    console.log('\n求差集');
    let a3 = new Set([1, 2, 3])
    let b3 = new Set([4, 2, 3, 56])
    let chaji = new Set([...b2].filter(x => !a2.has(x)))//
    console.log(chaji);

  </script>
</head>

<body>
  <p>set对象，set里面的value值是唯一的</p>
  <p>set可以自动排序，没有单独值</p>
  <p>Map 对象是键值对的集合。Map 中的一个键只能出现一次</p>
  <p>记A，B是两个集合，则所有属于A且不属于B的元素构成的集合，叫做集合A减集合B(或集合A与集合B之差)，类似地，对于集合A、B，把集合{x∣x∈A,且x∉B}叫做A与B的差集。
    记作：B-A</p>
</body>

</html>